using System.Collections;
using System.Collections.Generic;
using UnityEngine;

// SkeletonBattleState 类，继承自 EnemyState，用于处理骷髅敌人的战斗状态
public class SkeletonBattleState : EnemyState
{
    // 玩家角色的 Transform
    private Transform player;
    // 骷髅敌人
    private Enemy_Skeleton enemy;
    // 移动方向，1 表示向右，-1 表示向左
    private int moveDir = 1;

    // 构造函数，初始化状态
    public SkeletonBattleState(Enemy _enemyBase, EnemyStateMachine _stateMachine, string _animBoolName, Enemy_Skeleton _enemy) : base(_enemy, _stateMachine, _animBoolName)
    {
        this.enemy = _enemy;
    }

    // 进入状态时调用的方法
    public override void Enter()
    {
        base.Enter();
        // 通过玩家管理器获取玩家的 Transform
        player = PlayerManager.instance.player.transform;
        if (player.GetComponent<PlayerStats>().isDead)
        {
            stateMachine.ChangeState(enemy.moveState);
        }
    }

    // 退出状态时调用的方法
    public override void Exit()
    {
        base.Exit();
    }

    // 每帧更新状态的方法
    public override void Update()
    {
        base.Update();
        // 如果检测到玩家
        if (enemy.IsPlayerDetected())
        {
            // 设置战斗计时器为敌人的战斗时间
            stateTimer = enemy.battleTime;
            // 如果玩家距离敌人小于攻击距离
            if (enemy.IsPlayerDetected().distance < enemy.attackDistance)
            {
                // 如果可以攻击
                if (CanAttack())
                {
                    // 切换到攻击状态
                    stateMachine.ChangeState(enemy.attackState);
                }
            }
        }
        else
        {
            // 如果战斗时间结束或玩家距离太远
            if (stateTimer < 0 || Vector2.Distance(player.position, enemy.transform.position) > 10)
            {
                // 切换到待机状态
                stateMachine.ChangeState(enemy.idleState);
            }
        }

        // 跟随玩家
        if (player.position.x > enemy.transform.position.x)
        {
            moveDir = 1;
        }
        else if (player.position.x < enemy.transform.position.x)
        {
            moveDir = -1;
        }

        // 防止过近时敌人抽搐
        if (Vector2.Distance(player.position, enemy.transform.position) < 0.5f)
        {
            return;
        }
        else
        {
            // 设置敌人的速度
            enemy.SetVelocity(enemy.moveSpeed * moveDir, rb.velocity.y);
        }
    }

    // 判断是否可以进行攻击的方法
    private bool CanAttack()
    {
        // 如果当前时间大于上一次攻击时间加上攻击冷却时间
        if (Time.time > enemy.lastTimeSttacked + enemy.attackCooldown)
        {
            // 更新上一次攻击时间为当前时间
            enemy.attackCooldown = Random.Range(enemy.minAttackCooldown, enemy.maxAttackCooldown);
            enemy.lastTimeSttacked = Time.time;
            return true;
        }
        return false;
    }
}